feat: Добавление аннотации &ИсточникПараметров#23
Conversation
WalkthroughAdds end-to-end support for benchmark parameter sources: new annotation, annotation readers, configuration storage/serialization and APIs, descriptor APIs, launcher aggregation/converters, combinator signature change, validator extension, reporting updates, fixtures, samples and expanded tests for many parameter shapes and error cases. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant User as User
participant Launcher as ЗапускательБенчмарков
participant Config as КонфигурацияБенчмарков
participant Desc as ДескрипторБенчмарка
participant Source as Источник (метод/делегат)
participant Comb as КомбинаторПараметровБенчмарка
User->>Launcher: Запустить(Дескрипторы, Конфигурация)
Launcher->>Config: Параметры(), ИсточникиПараметров()
Launcher->>Desc: НаборыПараметров(), ИсточникиПараметров()
rect rgba(200,230,255,0.18)
note over Launcher,Source: Чтение и преобразование источников (поля/методы)
loop По каждому источнику
Launcher->>Source: Вызвать/Прочитать источник
Source-->>Launcher: Коллекция/значение
Launcher->>Launcher: ПреобразоватьВПараметрыМетодаБенчмарка(...)
end
end
Launcher->>Comb: Комбинировать(НаборыПараметров)
Comb-->>Launcher: Комбинации параметров
Launcher-->>User: Запустить бенчмарки (результаты)
sequenceDiagram
autonumber
participant Extractor as Извлекатель
participant Reflection as РаботаСАннотациями
participant Desc as ДескрипторБенчмарка
participant Cfg as КонфигурацияБенчмарков
Extractor->>Reflection: Аннотации("ИсточникПараметров")
Reflection-->>Extractor: Список аннотаций
loop По аннотациям
Extractor->>Reflection: Параметры("Значение")
Reflection-->>Extractor: Значения
alt Аннотация на метод
Extractor->>Desc: ДобавитьИсточникПараметров(Значение)
else Аннотация на поле
Extractor->>Cfg: ДобавитьИсточникПараметров(ИмяПоля, Значение)
end
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related PRs
Poem
✨ Finishing Touches🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
src/BenchmarkOneScript/core/Модули/КомбинаторПараметровБенчмарка.os (2)
85-106: Двойное добавление параметра в комбинацию (дубликаты в результатах)Во внутреннем цикле параметров группы параметр добавляется дважды для вариантов после первого из группы (внутри ветки Else и затем повторно вне условия). Это раздувает наборы и искажает комбинации.
Исправление: оставьте единичный вызов добавления после условия.
Иначе Для Инд = 0 По КоличествоКомбинаций - 1 Цикл Если ЭтоПервыйПараметр Тогда Комбинация = КомбинацииПараметров[Инд]; Иначе Комбинация = Новый Массив(); Для Каждого ТекущийПараметр Из КомбинацииПараметров[Инд] Цикл Комбинация.Добавить(ТекущийПараметр); КонецЦикла; КомбинацииПараметров.Добавить(Комбинация); - ДобавитьПараметрВКомбинацию(Комбинация, Параметр); КонецЕсли; ДобавитьПараметрВКомбинацию(Комбинация, Параметр); КонецЦикла;
30-35: Потенциальный выход за границы при Параметр = Массив()При пустом массиве обращение Параметр[0] вызовет ошибку. Нужна проверка на Количество() > 0.
- Если ТипЗнч(Параметр) = Тип("Массив") Тогда + Если ТипЗнч(Параметр) = Тип("Массив") Тогда + Если Параметр.Количество() = 0 Тогда + Продолжить; + КонецЕсли; Имя = "_"; ЭтоПараметрМетода = Параметр[0].ЭтоПараметрМетода;src/BenchmarkOneScript/core/Модули/ИзвлекательКонфигурацииБенчмарков.os (1)
36-43: Критично: во многих вызовах передаётся Конфигурация = Неопределено вместо созданной КонфигурацииБенчмарковПри отсутствии входной конфигурации вы создаёте КонфигурацияБенчмарков, но ниже продолжаете передавать параметр Конфигурация, который остаётся Неопределено. Любой вызов методов конфигурации упадёт.
Исправить на единообразную передачу переменной КонфигурацияБенчмарков:
- ПрочитатьАннотацииКолонок(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, Конфигурация); - ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, Конфигурация); + ПрочитатьАннотацииКолонок(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюКаталогАртефактов(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортMarkdown(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортJson(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортXml(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюЭкспортHtml(СвойстваКонструктора, КонфигурацияБенчмарков); + ПрочитатьАннотациюИсполняющаяСреда(СвойстваКонструктора, КонфигурацияБенчмарков); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеВсех, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым, РефлекторОбъекта, Конфигурация); - ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого, РефлекторОбъекта, Конфигурация); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередВсеми, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеВсех, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПередКаждым, РефлекторОбъекта, КонфигурацияБенчмарков); + ПрочитатьОбработчикиСобытия(СобытияБенчмарков.ПослеКаждого, РефлекторОбъекта, КонфигурацияБенчмарков);Also applies to: 50-53
src/BenchmarkOneScript/columns/Модули/КолонкаОтчетаБенчмарковПараметр.os (1)
31-37: Коллизия имён: локальная переменная “ИмяПараметра” совпадает с именем функцииЭто запутывает чтение и может привести к теням/ошибкам. Переименуйте локальную.
Предлагаемый патч:
-Функция Значение(СтрокаРезультата, Колонка) Экспорт +Функция Значение(СтрокаРезультата, Колонка) Экспорт @@ - ИмяПараметра = ИмяПараметра(Колонка); + ИмяПараметраКолонки = ИмяПараметра(Колонка); @@ - Если Параметр.Имя = ИмяПараметра Тогда + Если Параметр.Имя = ИмяПараметраКолонки Тогда Возврат Параметр.Значение; КонецЕсли;
🧹 Nitpick comments (15)
src/BenchmarkOneScript/core/Модули/КомбинаторПараметровБенчмарка.os (1)
24-61: Документировать особую группировку массивов по имени "_"Для читаемости стоит кратко пояснить, что массив трактуется как «связанный набор параметров» и намеренно попадает в общую группу с именем "_".
src/BenchmarkOneScript/core/Модули/ИзвлекательКонфигурацииБенчмарков.os (1)
218-246: Опечатка регистра “КонецЦИкла”Одна строка с заглавной И выбивается из стиля.
- КонецЦИкла; + КонецЦикла;src/BenchmarkOneScript/core/Классы/ПостроительОтчетаБенчмарков.os (2)
86-93: Динамическое добавление параметр-колонок без дублей — ок; стабилизируйте порядок при необходимостиПорядок колонок сейчас зависит от порядка строк расшифровки. Если важна детерминированность, собирайте имена и сортируйте перед добавлением.
415-419: Сортировка по параметрам: возможна избыточная стоимость на больших наборахКолонкаСодержитТолькоСериализуемыеЗначения делает полный проход по таблице для каждой колонki. Рассмотрите кеширование результата по имени колонки на время одной сортировки.
src/BenchmarkOneScript/core/Классы/ДескрипторБенчмарка.os (1)
102-124: Добавьте валидацию типа и (опц.) дедупликацию в ДобавитьИсточникПараметровИначе внутрь могут попасть неподдерживаемые типы и ломать дальнейшую обработку.
Предлагаемый патч:
Функция ДобавитьИсточникПараметров(Источник) Экспорт - _ИсточникиПараметров.Добавить(Источник); + Если ТипЗнч(Источник) <> Тип("Строка") И ТипЗнч(Источник) <> Тип("Делегат") Тогда + ВызватьИсключение "ИсточникПараметров: ожидается Строка или Делегат"; + КонецЕсли; + // опционально: исключить дубли + Если _ИсточникиПараметров.Найти(Источник) = Неопределено Тогда + _ИсточникиПараметров.Добавить(Источник); + КонецЕсли; Возврат ЭтотОбъект; КонецФункцииsrc/BenchmarkOneScript/core/Классы/ЗапускательБенчмарков.os (5)
321-334: Агрегация параметров: порядок и детерминизмОтличная конвергенция источников. Проверьте, что КомбинаторПараметровБенчмарка.Комбинировать сохраняет стабильный порядок комбинаций при одинаковых входах (важно для детерминированных тестов/отчетов). Если порядок не гарантирован, закрепите его внутри комбинатора.
655-667: Источники параметров полей: явные ожидания по типамСейчас допускаются Массив/ТаблицаЗначений/скаляр (через обертку). Для полей таблица приведет к передаче строки таблицы как значения поля. Это ожидаемо? Если нет — ограничьте до Массив/скаляр или добавьте явную валидацию с понятной ошибкой.
685-701: Уберите мертвый возвратВ конце ПреобразоватьВПараметрыМетодаБенчмарка есть неиспользуемый
Возврат Результат;— все ветки выше уже возвращают/бросят исключение. Удалите для ясности.Примените патч:
@@ КонецЕсли; - Возврат Результат; - КонецФункцииAlso applies to: 717-719
798-823: Исключение: орфография + повторное вычисление типаНебольшая правка сообщения и использование уже вычисленного
Типвместо повторных вызововТипЗнч(...).Примените патч и обновите соответствующий ассерт в тестах:
@@ - Тип = ТипЗнч(Источник); - Если ТипЗнч(Источник) = Тип("Делегат") Тогда + Тип = ТипЗнч(Источник); + Если Тип = Тип("Делегат") Тогда Делегат = Источник; - ИначеЕсли ТипЗнч(Источник) = Тип("Строка") Тогда + ИначеЕсли Тип = Тип("Строка") Тогда Делегат = Новый Делегат(_ОбъектБенчмарков, Источник); Иначе - ВызватьИсключение СтрШаблон("Не поддерживается тип <%1> в качестве источник параметров", Тип); + ВызватьИсключение СтрШаблон("Не поддерживается тип <%1> в качестве источника параметров", Тип); КонецЕсли;
1032-1037: ДополнитьМассив: защититься от НеопределеноНебольшая защитная проверка, чтобы избежать исключений при пустых источниках.
Примените патч:
Процедура ДополнитьМассив(Приемник, Источник) + Если Источник = Неопределено Тогда + Возврат; + КонецЕсли; + Для Каждого Значение Из Источник Цикл Приемник.Добавить(Значение); КонецЦикла; КонецПроцедурыtests/ТестыКонфигурации.os (2)
599-615: LGTM: базовые CRUD-тесты источников параметров конфигурацииТесты на установку/очистку выглядят корректно и покрывают основной контракт. Можно добавить отдельный тест на делегат как источник конфигурации, чтобы покрыть обе поддерживаемые формы.
688-714: Объединение: приоритет источникаПроверка, что источники параметров из источника-конфигурации перекрывают приемник, — верная. Убедитесь, что это задокументировано как ожидаемая семантика merge.
src/BenchmarkOneScript/core/Классы/КонфигурацияБенчмарков.os (1)
343-351: Добавить легкую валидацию входов (имя поля/тип источника) — опциональноЧтобы ловить ошибки раньше, можно проверять, что ИмяПоля — непустая строка, а Источник — строка или Делегат. Это изменит момент возникновения ошибок, поэтому пометьте как опционально.
tests/ТестыБенчмарков.os (1)
996-1013: Небольшое дублирование в подготовке конфигураций/дескрипторовМного однотипной подготовки (ОчиститьИсточникиПараметров/НайтиПоИмени/НастроитьКонфигурациюПодТесты). Вынесите в локальные хелперы, чтобы упростить поддержку тестов.
tests/fixtures/Классы/БенчмаркСИсточникамиПараметров.os (1)
40-150: Единообразие имен функций — опциональноНазвания методов-источников сейчас консистентны. Если планируете расширение, имеет смысл унифицировать префиксы (например,
ПолучитьЗначения…) для облегчения навигации.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (15)
src/BenchmarkOneScript/annotations/Классы/АннотацияИсточникПараметров.os(1 hunks)src/BenchmarkOneScript/columns/Модули/КолонкаОтчетаБенчмарковПараметр.os(2 hunks)src/BenchmarkOneScript/core/Классы/ВалидаторЗапускаБенчмарков.os(1 hunks)src/BenchmarkOneScript/core/Классы/ДескрипторБенчмарка.os(6 hunks)src/BenchmarkOneScript/core/Классы/ЗапускательБенчмарков.os(4 hunks)src/BenchmarkOneScript/core/Классы/КонфигурацияБенчмарков.os(11 hunks)src/BenchmarkOneScript/core/Классы/ПостроительОтчетаБенчмарков.os(2 hunks)src/BenchmarkOneScript/core/Классы/СериализаторКонфигурацииБенчмарков.os(2 hunks)src/BenchmarkOneScript/core/Модули/ИзвлекательДескрипторовБенчмарков.os(2 hunks)src/BenchmarkOneScript/core/Модули/ИзвлекательКонфигурацииБенчмарков.os(2 hunks)src/BenchmarkOneScript/core/Модули/КомбинаторПараметровБенчмарка.os(1 hunks)tests/fixtures/Классы/БенчмаркСАннотациямиКонфигурации.os(1 hunks)tests/fixtures/Классы/БенчмаркСИсточникамиПараметров.os(1 hunks)tests/ТестыБенчмарков.os(3 hunks)tests/ТестыКонфигурации.os(7 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: sonar / test
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: sonar / test
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
🔇 Additional comments (18)
src/BenchmarkOneScript/core/Модули/КомбинаторПараметровБенчмарка.os (1)
10-17: Устаревших вызововКомбинироватьс двумя аргументами не обнаруженоtests/fixtures/Классы/БенчмаркСАннотациямиКонфигурации.os (1)
2-2: Проверьте наличие и реализацию метода-источника “ПолучитьЗначения” в фикстуре
В файлеtests/fixtures/Классы/БенчмаркСАннотациямиКонфигурации.osна строке с аннотацией&ИсточникПараметров("ПолучитьЗначения")указан метод, но его реализация не найдена — без неё тесты сборки/запуска упадут при разрешении источника. Если метод отсутствует, добавьте процедуру или функцию
ПолучитьЗначенияв этот класс.src/BenchmarkOneScript/core/Модули/ИзвлекательКонфигурацииБенчмарков.os (2)
47-48: Чтение &ИсточникПараметров для полей: LGTM
158-172: Ридер ИсточникПараметров для полей: LGTMЛогика симметрична существующему ридеру Параметры, порядок значений сохраняется.
src/BenchmarkOneScript/core/Классы/ВалидаторЗапускаБенчмарков.os (1)
136-149: Добавлена проверка сериализуемости параметров методов: LGTMПокрывает новые наборы параметров, сообщения об ошибках дедуплицируются.
src/BenchmarkOneScript/core/Модули/ИзвлекательДескрипторовБенчмарков.os (2)
33-34: Включение чтения &ИсточникПараметров в основной поток извлечения: LGTM
89-103: Ридер ИсточникПараметров для методов: LGTMСемантика и порядок значений соответствуют ридеру Параметры.
src/BenchmarkOneScript/core/Классы/ДескрипторБенчмарка.os (3)
9-10: Введение _ИсточникиПараметров — окХорошо вписывается в модель дескриптора.
131-133: Копия через ФиксированныйМассив — окВозврат немутируемого среза уместен.
139-141: Очистка источников — окЦепочный API сохранён.
src/BenchmarkOneScript/core/Классы/СериализаторКонфигурацииБенчмарков.os (2)
76-78: Поддержка поля “ИсточникиПараметров” при конвертации — ок
205-207: Загрузка источников в конфигурацию — окsrc/BenchmarkOneScript/columns/Модули/КолонкаОтчетаБенчмарковПараметр.os (1)
45-49: No remaining calls to old API
Search across all.osfiles found zero references toИмяПараметраПоКолонке(…), so the rename is safe.src/BenchmarkOneScript/annotations/Классы/АннотацияИсточникПараметров.os (1)
79-81: Объявление аннотации — окМинимальная реализация соответствует остальному конвейеру.
src/BenchmarkOneScript/core/Классы/КонфигурацияБенчмарков.os (1)
51-57: LGTM: каркас источников параметров в конфигурации
- Инициализация таблицы, экспорт геттер/очистка/merge-применение — все согласовано.
- ВТаблицу() добавляет поле — ок.
- Имя поля и хелпер пустой таблицы — ок.
Also applies to: 323-327, 903-936, 1116-1128, 1188-1191, 1030-1036
tests/ТестыБенчмарков.os (2)
365-381: Сортировка по умолчанию: подтвердите детерминированностьОжидания порядка обновлены. Проверьте, что порядок не зависит от порядка перечисления коллекций/соответствий/таблиц источников, иначе тесты могут флапать.
707-1176: Новая поверхность тестов для источников параметров — отличноШирокое покрытие форм (скаляр/массив/структура/соответствие/таблица/делегат) и негативные кейсы выглядят полно. После правки текста исключения (см. ЗапускательБенчмарков) обновите соответствующий ассерт.
Предложенный патч для текста ожидания:
@@ - .ВыбрасываетИсключение("Не поддерживается тип <Структура> в качестве источник параметров"); + .ВыбрасываетИсключение("Не поддерживается тип <Структура> в качестве источника параметров");tests/fixtures/Классы/БенчмаркСИсточникамиПараметров.os (1)
1-18: LGTM: фикстура с аннотациями источниковАннотации на поле и методах заданы корректно; покрывают сценарии из тестов.
src/BenchmarkOneScript/core/Классы/СериализаторКонфигурацииБенчмарков.os
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
src/BenchmarkOneScript/core/Классы/СериализаторКонфигурацииБенчмарков.os (1)
215-218: Хорошая валидация типа источника!Проверка типа источника параметров перед сериализацией предотвращает возможные ошибки при работе с делегатами и другими несериализуемыми типами.
🧹 Nitpick comments (3)
src/BenchmarkOneScript/core/Классы/ЗапускательБенчмарков.os (2)
327-333: Оптимизируйте агрегацию параметровМножественные вызовы
ДополнитьМассивможно оптимизировать с помощью предварительного выделения памяти, если количество элементов известно заранее.НаборыПараметров = Новый Массив(); -ДополнитьМассив(НаборыПараметров, ПараметрыКонфигурации); -ДополнитьМассив(НаборыПараметров, ПараметрыКонфигурацииИзИсточников); -ДополнитьМассив(НаборыПараметров, ДескрипторБенчмарка.НаборыПараметров()); -ДополнитьМассив(НаборыПараметров, ПрочитатьИсточникиПараметровМетодаБенчмарка(ДескрипторБенчмарка)); +// Собираем все параметры из разных источников в один массив +ИсточникиПараметров = Новый Массив(); +ИсточникиПараметров.Добавить(ПараметрыКонфигурации); +ИсточникиПараметров.Добавить(ПараметрыКонфигурацииИзИсточников); +ИсточникиПараметров.Добавить(ДескрипторБенчмарка.НаборыПараметров()); +ИсточникиПараметров.Добавить(ПрочитатьИсточникиПараметровМетодаБенчмарка(ДескрипторБенчмарка)); + +Для Каждого Источник Из ИсточникиПараметров Цикл + ДополнитьМассив(НаборыПараметров, Источник); +КонецЦикла;
685-718: Рассмотрите использование паттерна Strategy для преобразования параметровТекущая реализация с множественными if-else может быть улучшена через использование паттерна Strategy или Map-диспетчеризацию.
+Перем _ПреобразователиПараметров; // Соответствие + +Процедура ИнициализироватьПреобразователи() + _ПреобразователиПараметров = Новый Соответствие(); + _ПреобразователиПараметров.Вставить(Тип("Массив"), "ПреобразоватьМассивВПараметрыМетодаБенчмарка"); + _ПреобразователиПараметров.Вставить(Тип("Структура"), "ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка"); + _ПреобразователиПараметров.Вставить(Тип("Соответствие"), "ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка"); + _ПреобразователиПараметров.Вставить(Тип("СтрокаТаблицыЗначений"), "ПреобразоватьСтрокуТаблицыЗначенийВПараметрыМетодаБенчмарка"); +КонецПроцедуры Функция ПреобразоватьВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры) // ... existing code ... ТипКоллекции = ТипЗнч(Параметры); - Если ТипКоллекции = Тип("Массив") Тогда - Возврат ПреобразоватьМассивВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); - ИначеЕсли ТипКоллекции = Тип("Структура") Или ТипКоллекции = Тип("Соответствие") Тогда - Возврат ПреобразоватьСтруктуруВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); - ИначеЕсли ТипКоллекции = Тип("СтрокаТаблицыЗначений") Тогда - Возврат ПреобразоватьСтрокуТаблицыЗначенийВПараметрыМетодаБенчмарка(ДескрипторБенчмарка, Параметры); - Иначе + + ИмяМетода = _ПреобразователиПараметров[ТипКоллекции]; + Если ИмяМетода = Неопределено Тогда ВызватьИсключение СтрШаблон( "Не поддерживается тип <%1> для передачи параметров в метод бенчмарка <%2>", ТипКоллекции, ДескрипторБенчмарка.Метод() ); КонецЕсли; + + Рефлектор = Новый Рефлектор(); + Возврат Рефлектор.ВызватьМетод(ЭтотОбъект, ИмяМетода, ДескрипторБенчмарка, Параметры); КонецФункцииtests/ТестыБенчмарков.os (1)
1167-1175: Рассмотрите вынос тестовых данных в отдельный модульЭкспортные функции с тестовыми данными лучше вынести в отдельный модуль-помощник для улучшения организации кода.
Создайте файл
tests/helpers/ТестовыеДанныеИсточниковПараметров.os:+// tests/helpers/ТестовыеДанныеИсточниковПараметров.os +Функция ПолучитьВалидныеЗначенияПараметровДляМетодаБенчмаркаСОднимПараметром() Экспорт + Значения = Новый Массив(); + Значения.Добавить("Тест"); + Значения.Добавить(100); + Возврат Значения; +КонецФункцииИ используйте в тестах:
-Делегат = Новый Делегат(ЭтотОбъект, "ПолучитьВалидныеЗначенияПараметровДляМетодаБенчмаркаСОднимПараметром"); +Делегат = Новый Делегат(ТестовыеДанныеИсточниковПараметров, "ПолучитьВалидныеЗначенияПараметровДляМетодаБенчмаркаСОднимПараметром");
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (7)
src/BenchmarkOneScript/core/Классы/ДескрипторБенчмарка.os(6 hunks)src/BenchmarkOneScript/core/Классы/ЗапускательБенчмарков.os(4 hunks)src/BenchmarkOneScript/core/Классы/КонфигурацияБенчмарков.os(11 hunks)src/BenchmarkOneScript/core/Классы/СериализаторКонфигурацииБенчмарков.os(3 hunks)src/BenchmarkOneScript/core/Модули/ИзвлекательКонфигурацииБенчмарков.os(3 hunks)src/BenchmarkOneScript/core/Модули/КомбинаторПараметровБенчмарка.os(2 hunks)tests/ТестыБенчмарков.os(3 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
- src/BenchmarkOneScript/core/Модули/ИзвлекательКонфигурацииБенчмарков.os
- src/BenchmarkOneScript/core/Классы/ДескрипторБенчмарка.os
- src/BenchmarkOneScript/core/Классы/КонфигурацияБенчмарков.os
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: sonar / test
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
- GitHub Check: sonar / test
🔇 Additional comments (8)
src/BenchmarkOneScript/core/Модули/КомбинаторПараметровБенчмарка.os (2)
31-33: LGTM! Правильная защита от пустых массивовДобавленная проверка на пустой массив параметров предотвращает возможные ошибки при дальнейшей обработке.
10-17: Совместимость изменения сигнатуры проверена – поиск показал единственный вызов в src/BenchmarkOneScript/core/Классы/ЗапускательБенчмарков.os:333, который передаёт один аргумент (НаборыПараметров) и соответствует новой сигнатуре.src/BenchmarkOneScript/core/Классы/СериализаторКонфигурацииБенчмарков.os (2)
115-118: Логика обработки строгости сериализации оправданаЗамена предупреждения на исключение при попытке сериализации делегатов обработчиков - правильное решение для предотвращения скрытых ошибок.
201-203: Добавьте проверку инициализацииДанные.ИсточникиПараметровперед циклом For Each
В методе СобратьКонфигурацию (СериализаторКонфигурацииБенчмарков.os:строка 202) убедитесь, что при отсутствии или nullИсточникиПараметроввы присваиваете емуНовый Массив(), чтобы цикл не выбросил ошибку.src/BenchmarkOneScript/core/Классы/ЗапускательБенчмарков.os (3)
801-807: Корректная обработка различных типов источников параметровЛогика обработки делегатов и строковых источников реализована правильно. Исключение для неподдерживаемых типов обеспечивает безопасность.
725-730: Правильная валидация количества параметровПроверка соответствия количества переданных параметров и параметров метода бенчмарка предотвращает ошибки во время выполнения.
754-761: Информативная обработка отсутствующих параметровСообщение об ошибке при отсутствии обязательного параметра содержит всю необходимую информацию для отладки.
tests/ТестыБенчмарков.os (1)
707-1177: Отличное покрытие тестами новой функциональности!Добавленные тесты для источников параметров охватывают все основные сценарии использования и граничные случаи:
- Различные типы источников (массивы, структуры, соответствия, таблицы значений)
- Обработка ошибок (неверные типы, отсутствующие параметры)
- Работа с делегатами
- Множественные источники
tests/ТестыБенчмарков.os
Outdated
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Обновите ожидаемые результаты теста сортировки
Изменение порядка выполнения бенчмарков в результатах теста указывает на изменение логики сортировки. Убедитесь, что это ожидаемое поведение.
🏁 Script executed:
#!/bin/bash
# Проверяем реализацию сортировки по умолчанию
ast-grep --pattern 'СортировкиОтчетаБенчмарков.ПоУмолчанию'Length of output: 321
🏁 Script executed:
#!/bin/bash
# Найти все упоминания модуля сортировки отчёта бенчмарков
rg -n 'СортировкиОтчетаБенчмарков' -C3
# Проверить конкретно реализацию или ссылку на default-сортировку
rg -n 'СортировкиОтчетаБенчмарков\.ПоУмолчанию' -C3Length of output: 13009
Реализовать обработку ПоУмолчанию или скорректировать тесты
- В
src/BenchmarkOneScript/core/Классы/ПостроительОтчетаБенчмарков.os(около строки 391) добавить ветвь
Если Сортировка = СортировкиОтчетаБенчмарков.ПоУмолчанию Тогда …
для явного применения нужного порядка (например,ДобавитьСортировку(КолонкиСортировки, КолонкиОтчетаБенчмарков.Метод)). - Если же fallback на порядок выполнения считается корректным, обновить ожидаемые результаты в
tests/ТестыБенчмарков.os(365–381) под текущий вывод.
🤖 Prompt for AI Agents
В tests/ТестыБенчмарков.os строки 365–381 ожидают конкретный порядок строк, но
реализация сборки отчёта не обрабатывает явно вариант Сортировки =
СортировкиОтчетаБенчмарков.ПоУмолчанию; добавьте в файл
src/BenchmarkOneScript/core/Классы/ПостроительОтчетаБенчмарков.os (около строки
391) ветвь Если Сортировка = СортировкиОтчетаБенчмарков.ПоУмолчанию Тогда ... и
внутри явно примените нужный порядок, например вызвать
ДобавитьСортировку(КолонкиСортировки, КолонкиОтчетаБенчмарков.Метод) или другой
столбец, определяющий ожидаемый порядок; альтернативно, если текущий
fallback-порядок считается корректным, скорректируйте ожидаемые значения в
tests/ТестыБенчмарков.os (365–381) чтобы они соответствовали фактическому
выводу.
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (7)
samples/benchmarks/Классы/БенчмаркИсточникПараметров.os (4)
5-6: Initialize Множитель to a safe default when not injected.
Prevents runtime errors if the sample is run outside the harness or sources fail.-Процедура ПриСозданииОбъекта() -КонецПроцедуры +Процедура ПриСозданииОбъекта() + Если Множитель = Неопределено Тогда + Множитель = 1; + КонецЕсли; +КонецПроцедуры
12-16: Fail fast on unknown ТипАлгоритма.
Improves diagnostics for mis-typed parameters from sources.- ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда - Результат = ФакториалРекурсивный(Число) * Множитель; - КонецЕсли; + ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда + Результат = ФакториалРекурсивный(Число) * Множитель; + Иначе + ВызватьИсключение "Неизвестный ТипАлгоритма: " + ТипАлгоритма; + КонецЕсли;
21-27: Validate input: disallow отрицательные значения.
Protects factorial helpers from invalid input.Функция ФакториалИтеративный(Число) + Если Число < 0 Тогда + ВызватьИсключение "Число должно быть неотрицательным"; + КонецЕсли; Результат = 1;
30-35: Mirror validation in recursive вариант.
Avoids undefined behavior for negatives.Функция ФакториалРекурсивный(Число) + Если Число < 0 Тогда + ВызватьИсключение "Число должно быть неотрицательным"; + КонецЕсли; Если Число <= 1 Тогдаsamples/api/УстановкаИсточникаПараметровПример.os (1)
42-42: Fix typos in comments.
Minor polish for developer-facing sample text.-Конфигурация.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров +Конфигурация.ОчиститьИсточникиПараметров(); // Очищаем существующие источники параметров ... -ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров +ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существующие источники параметровAlso applies to: 48-48
docs/Параметризация.md (2)
7-10: Используйте заголовки вместо жирного текста (MD036)Замените выделения на заголовки уровня 4.
-**Параметры для поля класса, заданные напрямую** +#### Параметры для поля класса, заданные напрямуюАналогично применить ко всем подобным подзаголовкам ниже (“Параметры для поля…”, “Параметры для метода…”, “Добавление параметров…”, и т.д.).
24-41: Подзаголовок + табы
- Подзаголовок оформить как #### (см. замечание выше). 2) В коде заменить табы на пробелы (MD010).
-**Параметры для поля класса, полученные из функции** +#### Параметры для поля класса, полученные из функции
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
docs/README.md(2 hunks)docs/Параметризация.md(2 hunks)samples/api/УстановкаИсточникаПараметровПример.os(1 hunks)samples/benchmarks/Классы/БенчмаркИсточникПараметров.os(1 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
docs/Параметризация.md
9-9: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
24-24: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
35-35: Hard tabs
Column: 1
(MD010, no-hard-tabs)
36-36: Hard tabs
Column: 1
(MD010, no-hard-tabs)
37-37: Hard tabs
Column: 1
(MD010, no-hard-tabs)
38-38: Hard tabs
Column: 1
(MD010, no-hard-tabs)
42-42: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
51-51: Hard tabs
Column: 1
(MD010, no-hard-tabs)
55-55: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
63-63: Hard tabs
Column: 1
(MD010, no-hard-tabs)
70-70: Hard tabs
Column: 1
(MD010, no-hard-tabs)
71-71: Hard tabs
Column: 1
(MD010, no-hard-tabs)
72-72: Hard tabs
Column: 1
(MD010, no-hard-tabs)
74-74: Hard tabs
Column: 1
(MD010, no-hard-tabs)
75-75: Hard tabs
Column: 1
(MD010, no-hard-tabs)
76-76: Hard tabs
Column: 1
(MD010, no-hard-tabs)
78-78: Hard tabs
Column: 1
(MD010, no-hard-tabs)
79-79: Hard tabs
Column: 1
(MD010, no-hard-tabs)
80-80: Hard tabs
Column: 1
(MD010, no-hard-tabs)
82-82: Hard tabs
Column: 1
(MD010, no-hard-tabs)
87-87: Hard tabs
Column: 1
(MD010, no-hard-tabs)
89-89: Hard tabs
Column: 1
(MD010, no-hard-tabs)
90-90: Hard tabs
Column: 1
(MD010, no-hard-tabs)
91-91: Hard tabs
Column: 1
(MD010, no-hard-tabs)
92-92: Hard tabs
Column: 1
(MD010, no-hard-tabs)
94-94: Hard tabs
Column: 1
(MD010, no-hard-tabs)
95-95: Hard tabs
Column: 1
(MD010, no-hard-tabs)
96-96: Hard tabs
Column: 1
(MD010, no-hard-tabs)
97-97: Hard tabs
Column: 1
(MD010, no-hard-tabs)
99-99: Hard tabs
Column: 1
(MD010, no-hard-tabs)
104-104: Hard tabs
Column: 1
(MD010, no-hard-tabs)
105-105: Hard tabs
Column: 1
(MD010, no-hard-tabs)
106-106: Hard tabs
Column: 1
(MD010, no-hard-tabs)
107-107: Hard tabs
Column: 1
(MD010, no-hard-tabs)
113-113: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
117-117: Hard tabs
Column: 1
(MD010, no-hard-tabs)
118-118: Hard tabs
Column: 1
(MD010, no-hard-tabs)
121-121: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
129-129: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
138-138: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
154-154: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
162-162: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
216-216: Hard tabs
Column: 1
(MD010, no-hard-tabs)
217-217: Hard tabs
Column: 1
(MD010, no-hard-tabs)
218-218: Hard tabs
Column: 1
(MD010, no-hard-tabs)
219-219: Hard tabs
Column: 1
(MD010, no-hard-tabs)
220-220: Hard tabs
Column: 1
(MD010, no-hard-tabs)
226-226: Hard tabs
Column: 1
(MD010, no-hard-tabs)
227-227: Hard tabs
Column: 1
(MD010, no-hard-tabs)
228-228: Hard tabs
Column: 1
(MD010, no-hard-tabs)
229-229: Hard tabs
Column: 1
(MD010, no-hard-tabs)
230-230: Hard tabs
Column: 1
(MD010, no-hard-tabs)
235-235: Hard tabs
Column: 1
(MD010, no-hard-tabs)
236-236: Hard tabs
Column: 1
(MD010, no-hard-tabs)
237-237: Hard tabs
Column: 1
(MD010, no-hard-tabs)
238-238: Hard tabs
Column: 1
(MD010, no-hard-tabs)
243-243: Hard tabs
Column: 1
(MD010, no-hard-tabs)
244-244: Hard tabs
Column: 1
(MD010, no-hard-tabs)
245-245: Hard tabs
Column: 1
(MD010, no-hard-tabs)
246-246: Hard tabs
Column: 1
(MD010, no-hard-tabs)
252-252: Hard tabs
Column: 1
(MD010, no-hard-tabs)
253-253: Hard tabs
Column: 1
(MD010, no-hard-tabs)
254-254: Hard tabs
Column: 1
(MD010, no-hard-tabs)
255-255: Hard tabs
Column: 1
(MD010, no-hard-tabs)
256-256: Hard tabs
Column: 1
(MD010, no-hard-tabs)
257-257: Hard tabs
Column: 1
(MD010, no-hard-tabs)
258-258: Hard tabs
Column: 1
(MD010, no-hard-tabs)
259-259: Hard tabs
Column: 1
(MD010, no-hard-tabs)
260-260: Hard tabs
Column: 1
(MD010, no-hard-tabs)
261-261: Hard tabs
Column: 1
(MD010, no-hard-tabs)
262-262: Hard tabs
Column: 1
(MD010, no-hard-tabs)
263-263: Hard tabs
Column: 1
(MD010, no-hard-tabs)
264-264: Hard tabs
Column: 1
(MD010, no-hard-tabs)
265-265: Hard tabs
Column: 1
(MD010, no-hard-tabs)
266-266: Hard tabs
Column: 1
(MD010, no-hard-tabs)
267-267: Hard tabs
Column: 1
(MD010, no-hard-tabs)
268-268: Hard tabs
Column: 1
(MD010, no-hard-tabs)
269-269: Hard tabs
Column: 1
(MD010, no-hard-tabs)
270-270: Hard tabs
Column: 1
(MD010, no-hard-tabs)
271-271: Hard tabs
Column: 1
(MD010, no-hard-tabs)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
- GitHub Check: sonar / test
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: sonar / test
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
🔇 Additional comments (17)
samples/benchmarks/Классы/БенчмаркИсточникПараметров.os (1)
37-44: LGTM: источник для Множитель минимален и нагляден.samples/api/УстановкаИсточникаПараметровПример.os (1)
38-51: LGTM: показан полный цикл конфигурирования источников параметров.
Clear and idiomatic use of конфигурации и дескриптора.docs/README.md (4)
3-6: Навигация “Начало работы” — окСтруктура и ссылки выглядят корректно.
24-25: Каталог аннотаций корректен
Каталогsrc/BenchmarkOneScript/annotations/Классыприсутствует и содержит ожидаемые файлы аннотаций.
7-18: Термин “Среда выполнения” используется последовательно. В документации нет вхождений “Среда исполнения”, правки не требуются.
21-22: Пути к примерам существуют. Каталогиsamples/benchmarks/Классыиsamples/apiнайдены и доступны.docs/Параметризация.md (11)
14-22: Пример с &Параметры — ок
42-53: Пример параметров метода — ок
55-66: Аннотация источника для метода — ок
67-109: Три формата источника — окПокрыты ТаблицаЗначений, массив массивов и массив структур.
113-119: API: ДобавитьПараметр — ок
121-128: API: Источник для поля по имени — ок
129-136: API: Источник для поля через Делегат — ок
138-152: API: Добавление параметров метода — ок
154-161: API: Источник для метода по имени — ок
162-169: API: Источник для метода через Делегат — ок
171-201: Пример 1 и результаты — ок
docs/Параметризация.md
Outdated
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Заменить табы на пробелы в кодовых блоках (MD010)
Встречаются символы табуляции; замените их на 4 пробела для единообразия.
Also applies to: 67-109, 189-201, 276-285
🏁 Script executed:
#!/bin/bash
# Показать строки с табами в файле и их количество
rg -nP "\t" docs/Параметризация.md | tee /dev/stderr | wc -lLength of output: 259
🏁 Script executed:
#!/bin/bash
# Count and list lines with tabs in docs/Параметризация.md
echo "Count of lines with tabs:"
rg -nP "\t" -n docs/Параметризация.md | wc -l
echo "Lines containing tabs (with line numbers):"
rg -nP "\t" -n docs/Параметризация.mdLength of output: 2712
Replace all tabs with four spaces in code blocks
71 tab characters were detected in docs/Параметризация.md (e.g. lines 35–38, 51, 63, 70–80, etc.); replace each leading tab in code fences with four spaces to satisfy MD010.
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
35-35: Hard tabs
Column: 1
(MD010, no-hard-tabs)
36-36: Hard tabs
Column: 1
(MD010, no-hard-tabs)
37-37: Hard tabs
Column: 1
(MD010, no-hard-tabs)
38-38: Hard tabs
Column: 1
(MD010, no-hard-tabs)
🤖 Prompt for AI Agents
In docs/Параметризация.md around lines 33–40 (and other reported locations such
as 35–38, 51, 63, 70–80), code block lines use leading tab characters; replace
each leading tab inside fenced code blocks with four space characters so the
code fences conform to MD010; scan the entire file for tabs within ``` fences
and convert only the leading tabs at the start of each code line to four spaces
(preserve non-leading whitespace and the content).
There was a problem hiding this comment.
🛠️ Refactor suggestion
Guard against missing descriptor before mutation.
Prevents a null dereference if the name changes or type isn’t registered.
ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркФакториала");
+Если ДескрипторБенчмарка = Неопределено Тогда
+ ВызватьИсключение "Бенчмарк 'БенчмаркФакториала' не найден для типа: " + Строка(Тип);
+КонецЕсли;
ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существующие источники параметров📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); | |
| ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркФакториала"); | |
| ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существуюие источники параметров | |
| ДескрипторБенчмарка.ДобавитьИсточникПараметров(Новый Делегат(ЭтотОбъект, "ПолучитьПараметрыБнечмарка")); | |
| ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); | |
| ДескрипторБенчмарка = ДескрипторыБенчмарков.НайтиПоИмени("БенчмаркФакториала"); | |
| Если ДескрипторБенчмарка = Неопределено Тогда | |
| ВызватьИсключение "Бенчмарк 'БенчмаркФакториала' не найден для типа: " + Строка(Тип); | |
| КонецЕсли; | |
| ДескрипторБенчмарка.ОчиститьИсточникиПараметров(); // Очищаем существующие источники параметров | |
| ДескрипторБенчмарка.ДобавитьИсточникПараметров(Новый Делегат(ЭтотОбъект, "ПолучитьПараметрыБнечмарка")); |
🤖 Prompt for AI Agents
In samples/api/УстановкаИсточникаПараметровПример.os around lines 46–49, the
code assumes ДескрипторБенчмарка is always found and calls methods on it; add a
guard to check that ДескрипторБенчмарка is not null/undefined before mutating it
(e.g., if not found log or throw and skip the mutation), and only call
ОчиститьИсточникиПараметров and ДобавитьИсточникПараметров when the descriptor
exists to prevent a null dereference.
There was a problem hiding this comment.
💡 Verification agent
🧩 Analysis chain
Fix typo in exported API name: Бнечмарка → Бенчмарка (breaks discoverability, leaks into samples).
Rename both the annotation target and the function to the correct Russian spelling.
Run to find other occurrences to rename:
Apply:
-&ИсточникПараметров("ПолучитьПараметрыБнечмарка")
+&ИсточникПараметров("ПолучитьПараметрыБенчмарка")
...
-Функция ПолучитьПараметрыБнечмарка() Экспорт
+Функция ПолучитьПараметрыБенчмарка() ЭкспортAlso applies to: 46-46
🏁 Script executed:
#!/bin/bash
rg -nP -C2 'ПолучитьПараметрыБнечмарка'Length of output: 2616
Rename all occurrences of “ПолучитьПараметрыБнечмарка” → “ПолучитьПараметрыБенчмарка” (typo breaks API discoverability)
Update both the string literals and exported function definitions in the following locations:
- docs/Параметризация.md
• Line 213: &ИсточникПараметров("ПолучитьПараметрыБнечмарка") → &ИсточникПараметров("ПолучитьПараметрыБенчмарка")
• Line 250: Функция ПолучитьПараметрыБнечмарка() Экспорт → Функция ПолучитьПараметрыБенчмарка() Экспорт - samples/api/УстановкаИсточникаПараметровПример.os
• Line 13: Функция ПолучитьПараметрыБнечмарка() Экспорт → Функция ПолучитьПараметрыБенчмарка() Экспорт
• Line 49: Делегат(ЭтотОбъект, "ПолучитьПараметрыБнечмарка") → Делегат(ЭтотОбъект, "ПолучитьПараметрыБенчмарка") - samples/benchmarks/Классы/БенчмаркИсточникПараметров.os
• Line 9: &ИсточникПараметров("ПолучитьПараметрыБнечмарка") → &ИсточникПараметров("ПолучитьПараметрыБенчмарка")
• Line 46: Функция ПолучитьПараметрыБнечмарка() Экспорт → Функция ПолучитьПараметрыБенчмарка() Экспорт
🤖 Prompt for AI Agents
In samples/benchmarks/Классы/БенчмаркИсточникПараметров.os (lines 9 and 46),
docs/Параметризация.md (lines 213 and 250), and
samples/api/УстановкаИсточникаПараметровПример.os (lines 13 and 49) the
identifier string and function name contain a typo "ПолучитьПараметрыБнечмарка";
rename every occurrence to "ПолучитьПараметрыБенчмарка" so the exported function
signatures and &ИсточникПараметров(...) string match, and update the
Делегат(...) call accordingly to preserve API discoverability and linkage.
|
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
samples/benchmarks/Классы/БенчмаркИсточникПараметров.os (1)
46-69: LGTM: параметры бенчмарка и исправленная орфография.Имена колонок совпадают с параметрами процедуры; опечатка “Бнечмарка” исправлена.
docs/Параметризация.md (1)
35-40: Replace hard tabs in code fences with four spaces (fixes MD010).Leading tabs appear inside fenced code blocks; replace with 4 spaces. Applies to the listed ranges.
Example fix (pattern to apply throughout fenced blocks):
-Функция ПолучитьАлгоритмыХеширования() Экспорт - Значения = Новый Массив(); - Значения.Добавить("MD5"); - Значения.Добавить("SHA256"); - Возврат Значения; +Функция ПолучитьАлгоритмыХеширования() Экспорт + Значения = Новый Массив(); + Значения.Добавить("MD5"); + Значения.Добавить("SHA256"); + Возврат Значения; КонецФункцииAlso applies to: 51-53, 70-101, 104-109, 117-119, 124-136, 141-151, 157-169, 189-201, 205-274, 278-285
🧹 Nitpick comments (8)
.bsl-language-server.json (1)
8-8: Consider normalizing the dictionary (array, sorting, dedup, case policy)Optional maintenance to keep this list healthy:
- Store as an array instead of a long comma-separated string for easier diffs and tooling (if bsl-language-server supports arrays).
- Sort and deduplicate entries.
- Decide on case sensitivity. If the Typo diagnostic is case-insensitive, you can keep one form; if it’s case-sensitive, consider adding missing lowercase forms for “Воркер”, “Регулярка”, “Валидатор”, “Алиас”, “Несериализуемых” for consistency.
If you want a quick patch to add lowercase variants while staying with the current format, apply:
- "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,Воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Несериализуемых,Валидатор,Алиас" + "userWordsToIgnore": "Бенчмаркинг,Бенчмарк,бенчмарк,Бенчмарки,бенчмарки,Бенчмарков,бенчмарков,Бенчмарка,бенчмарка,Бенчмарку,Прогревочных,прогревочных,Запускатель,запускатель,Распарсить,распарсить,Регулярка,регулярка,Воркер,воркер,Сериализовать,Сериализации,Сериализуемые,Сериализуется,Сериализацию,сериализацию,сериализуемым,сериализован,Несериализуемых,несериализуемых,Валидатор,валидатор,Алиас,алиас"Please confirm whether the Typo diagnostic is case-insensitive; if it is, we can simplify this list substantially.
samples/benchmarks/Классы/БенчмаркИсточникПараметров.os (2)
21-28: Добавьте валидацию входа для факториала (неотрицательное целое).Предотвращает некорректные входы и бесшумные ошибки.
Функция ФакториалИтеративный(Число) + Если Число < 0 Тогда + ВызватьИсключение "Число должно быть >= 0"; + КонецЕсли; Результат = 1; Для Сч = 1 По Число Цикл Результат = Результат * Сч; КонецЦикла; Возврат Результат; КонецФункции
30-35: Согласуйте граничные условия в рекурсивной версии.Для отрицательных значений сейчас тоже вернется 1; лучше валидировать вход.
Функция ФакториалРекурсивный(Число) - Если Число <= 1 Тогда + Если Число < 0 Тогда + ВызватьИсключение "Число должно быть >= 0"; + КонецЕсли; + Если Число <= 1 Тогда Возврат 1; КонецЕсли; Возврат Число * ФакториалРекурсивный(Число - 1); КонецФункцииdocs/Параметризация.md (5)
9-11: Use proper headings instead of bold text (fixes MD036).Convert emphasized section titles to Markdown headings to satisfy markdownlint and improve navigation.
-**Параметры для поля класса, заданные напрямую** +#### Параметры для поля класса, заданные напрямую -**Параметры для поля класса, полученные из функции** +#### Параметры для поля класса, полученные из функции -**Параметры для метода бенчмарка, заданные напрямую** +#### Параметры для метода бенчмарка, заданные напрямую -**Параметры для метода бенчмарка, полученные из функции** +#### Параметры для метода бенчмарка, полученные из функции -**Добавление параметров для поля класса** +#### Добавление параметров для поля класса -**Указание источника параметров для поля класса по имени функции** +#### Указание источника параметров для поля класса по имени функции -**Указание источника параметров для поля класса через делегат** +#### Указание источника параметров для поля класса через делегат -**Добавление параметров для метода бенчмарка** +#### Добавление параметров для метода бенчмарка -**Указание источника параметров для метода бенчмарка по имени функции** +#### Указание источника параметров для метода бенчмарка по имени функции -**Указание источника параметров для метода бенчмарка через делегат** +#### Указание источника параметров для метода бенчмарка через делегатAlso applies to: 24-25, 42-44, 55-58, 113-114, 121-122, 129-131, 138-140, 154-156, 162-169
67-109: Avoid duplicate function names across variants to prevent copy-paste confusion.Three examples define the same exported name ПолучитьПараметрыБенчмарка(); rename for clarity and update references.
-Функция ПолучитьПараметрыБенчмарка() Экспорт +Функция ПолучитьПараметрыБенчмарка_Таблица() Экспорт ... -Функция ПолучитьПараметрыБенчмарка() Экспорт +Функция ПолучитьПараметрыБенчмарка_Массивы() Экспорт ... -Функция ПолучитьПараметрыБенчмарка() Экспорт +Функция ПолучитьПараметрыБенчмарка_Структуры() ЭкспортAnd pick one in the annotations above/below:
-&ИсточникПараметров("ПолучитьПараметрыБенчмарка") +&ИсточникПараметров("ПолучитьПараметрыБенчмарка_Таблица")Run your examples once to ensure the selected name matches.
115-119: Flatten chained calls for BSL copy-paste correctness.Leading-dot multiline chaining may not parse in BSL; show two explicit calls to avoid syntax issues in docs.
-Конфигурация - .ДобавитьПараметр("АлгоритмХеширования", "MD5") - .ДобавитьПараметр("АлгоритмХеширования", "SHA256"); +Конфигурация.ДобавитьПараметр("АлгоритмХеширования", "MD5"); +Конфигурация.ДобавитьПараметр("АлгоритмХеширования", "SHA256");
131-136: Directive placement nit: keep a single#Использовать delegateper module.If multiple snippets are combined, ensure the directive isn’t duplicated.
202-274: Example clarity: guard recursion and show return usage.Optional: add комментарии о диапазоне входных значений и (при желании) возвращать результат из процедуры для демонстрации проверки результата.
-Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт +Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт ... - Если ТипАлгоритма = "Итеративный" Тогда + // Число разумно держать <= 20 для рекурсии + Если ТипАлгоритма = "Итеративный" Тогда Результат = ФакториалИтеративный(Число) * Множитель; ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда Результат = ФакториалРекурсивный(Число) * Множитель; КонецЕсли; + // Используйте результат по назначению (лог/проверка), чтобы исключить dead-code оптимизации
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (4)
.bsl-language-server.json(1 hunks)docs/Параметризация.md(2 hunks)samples/api/УстановкаИсточникаПараметровПример.os(1 hunks)samples/benchmarks/Классы/БенчмаркИсточникПараметров.os(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- samples/api/УстановкаИсточникаПараметровПример.os
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
docs/Параметризация.md
9-9: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
24-24: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
35-35: Hard tabs
Column: 1
(MD010, no-hard-tabs)
36-36: Hard tabs
Column: 1
(MD010, no-hard-tabs)
37-37: Hard tabs
Column: 1
(MD010, no-hard-tabs)
38-38: Hard tabs
Column: 1
(MD010, no-hard-tabs)
42-42: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
51-51: Hard tabs
Column: 1
(MD010, no-hard-tabs)
55-55: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
63-63: Hard tabs
Column: 1
(MD010, no-hard-tabs)
70-70: Hard tabs
Column: 1
(MD010, no-hard-tabs)
71-71: Hard tabs
Column: 1
(MD010, no-hard-tabs)
72-72: Hard tabs
Column: 1
(MD010, no-hard-tabs)
74-74: Hard tabs
Column: 1
(MD010, no-hard-tabs)
75-75: Hard tabs
Column: 1
(MD010, no-hard-tabs)
76-76: Hard tabs
Column: 1
(MD010, no-hard-tabs)
78-78: Hard tabs
Column: 1
(MD010, no-hard-tabs)
79-79: Hard tabs
Column: 1
(MD010, no-hard-tabs)
80-80: Hard tabs
Column: 1
(MD010, no-hard-tabs)
82-82: Hard tabs
Column: 1
(MD010, no-hard-tabs)
87-87: Hard tabs
Column: 1
(MD010, no-hard-tabs)
89-89: Hard tabs
Column: 1
(MD010, no-hard-tabs)
90-90: Hard tabs
Column: 1
(MD010, no-hard-tabs)
91-91: Hard tabs
Column: 1
(MD010, no-hard-tabs)
92-92: Hard tabs
Column: 1
(MD010, no-hard-tabs)
94-94: Hard tabs
Column: 1
(MD010, no-hard-tabs)
95-95: Hard tabs
Column: 1
(MD010, no-hard-tabs)
96-96: Hard tabs
Column: 1
(MD010, no-hard-tabs)
97-97: Hard tabs
Column: 1
(MD010, no-hard-tabs)
99-99: Hard tabs
Column: 1
(MD010, no-hard-tabs)
104-104: Hard tabs
Column: 1
(MD010, no-hard-tabs)
105-105: Hard tabs
Column: 1
(MD010, no-hard-tabs)
106-106: Hard tabs
Column: 1
(MD010, no-hard-tabs)
107-107: Hard tabs
Column: 1
(MD010, no-hard-tabs)
113-113: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
117-117: Hard tabs
Column: 1
(MD010, no-hard-tabs)
118-118: Hard tabs
Column: 1
(MD010, no-hard-tabs)
121-121: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
129-129: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
138-138: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
154-154: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
162-162: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
216-216: Hard tabs
Column: 1
(MD010, no-hard-tabs)
217-217: Hard tabs
Column: 1
(MD010, no-hard-tabs)
218-218: Hard tabs
Column: 1
(MD010, no-hard-tabs)
219-219: Hard tabs
Column: 1
(MD010, no-hard-tabs)
220-220: Hard tabs
Column: 1
(MD010, no-hard-tabs)
226-226: Hard tabs
Column: 1
(MD010, no-hard-tabs)
227-227: Hard tabs
Column: 1
(MD010, no-hard-tabs)
228-228: Hard tabs
Column: 1
(MD010, no-hard-tabs)
229-229: Hard tabs
Column: 1
(MD010, no-hard-tabs)
230-230: Hard tabs
Column: 1
(MD010, no-hard-tabs)
235-235: Hard tabs
Column: 1
(MD010, no-hard-tabs)
236-236: Hard tabs
Column: 1
(MD010, no-hard-tabs)
237-237: Hard tabs
Column: 1
(MD010, no-hard-tabs)
238-238: Hard tabs
Column: 1
(MD010, no-hard-tabs)
243-243: Hard tabs
Column: 1
(MD010, no-hard-tabs)
244-244: Hard tabs
Column: 1
(MD010, no-hard-tabs)
245-245: Hard tabs
Column: 1
(MD010, no-hard-tabs)
246-246: Hard tabs
Column: 1
(MD010, no-hard-tabs)
252-252: Hard tabs
Column: 1
(MD010, no-hard-tabs)
253-253: Hard tabs
Column: 1
(MD010, no-hard-tabs)
254-254: Hard tabs
Column: 1
(MD010, no-hard-tabs)
255-255: Hard tabs
Column: 1
(MD010, no-hard-tabs)
256-256: Hard tabs
Column: 1
(MD010, no-hard-tabs)
257-257: Hard tabs
Column: 1
(MD010, no-hard-tabs)
258-258: Hard tabs
Column: 1
(MD010, no-hard-tabs)
259-259: Hard tabs
Column: 1
(MD010, no-hard-tabs)
260-260: Hard tabs
Column: 1
(MD010, no-hard-tabs)
261-261: Hard tabs
Column: 1
(MD010, no-hard-tabs)
262-262: Hard tabs
Column: 1
(MD010, no-hard-tabs)
263-263: Hard tabs
Column: 1
(MD010, no-hard-tabs)
264-264: Hard tabs
Column: 1
(MD010, no-hard-tabs)
265-265: Hard tabs
Column: 1
(MD010, no-hard-tabs)
266-266: Hard tabs
Column: 1
(MD010, no-hard-tabs)
267-267: Hard tabs
Column: 1
(MD010, no-hard-tabs)
268-268: Hard tabs
Column: 1
(MD010, no-hard-tabs)
269-269: Hard tabs
Column: 1
(MD010, no-hard-tabs)
270-270: Hard tabs
Column: 1
(MD010, no-hard-tabs)
271-271: Hard tabs
Column: 1
(MD010, no-hard-tabs)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: sonar / test
- GitHub Check: test (stable) / build (ubuntu-latest, stable)
- GitHub Check: test (stable) / build (macos-latest, stable)
- GitHub Check: test (dev) / build (macos-latest, dev)
- GitHub Check: test (stable) / build (windows-latest, stable)
- GitHub Check: test (dev) / build (ubuntu-latest, dev)
- GitHub Check: test (dev) / build (windows-latest, dev)
- GitHub Check: sonar / test
🔇 Additional comments (8)
.bsl-language-server.json (1)
8-8: LGTM: added lowercase “сериализацию” to the ignore listChange is minimal and safe; JSON remains valid.
samples/benchmarks/Классы/БенчмаркИсточникПараметров.os (3)
1-2: Confirm annotation binding at module scope for variable.Проверьте, что извлекатель аннотаций поддерживает размещение
&ИсточникПараметров("ПолучитьМножители")непосредственно передПерем(без функции/процедуры рядом). Если нет — потребуется явное сопоставление с целевой переменной или перенос аннотации на поддерживаемое место.
38-43: LGTM: источник множителей прост и читаем.Возврат
Массивподходит; убедитесь, что комбинатор корректно работает с порядком значений.
8-18: Добавить обработку неизвестного ТипАлгоритма и, при необходимости, возвращать результатПри некорректном значении ТипАлгоритма переменная Результат не инициализируется, и результат бенчмарка теряется.
Минимальная защита:
Если ТипАлгоритма = "Итеративный" Тогда Результат = ФакториалИтеративный(Число) * Множитель; ИначеЕсли ТипАлгоритма = "Рекурсивный" Тогда Результат = ФакториалРекурсивный(Число) * Множитель; + Иначе + ВызватьИсключение("Неизвестный ТипАлгоритма: " + ТипАлгоритма); КонецЕсли;Опционально можно превратить процедуру в функцию и возвращать Результат:
- Процедура БенчмаркФакториала(Число, ТипАлгоритма) Экспорт + Функция БенчмаркФакториала(Число, ТипАлгоритма) Экспорт … - КонецПроцедуры + Возврат Результат; + КонецФункцииУбедитесь, что ваш раннер распознаёт оба варианта; иначе оставьте процедуру.
docs/Параметризация.md (4)
59-66: LGTM: методная аннотация источника параметров соответствует описанию.
121-127: LGTM: ссылка на функцию-источник для поля соответствует примеру выше.
140-152: LGTM: пример добавления наборов параметров через дескриптор.
173-187: LGTM: пример параметризации поля и метода совместно.
There was a problem hiding this comment.
🛠️ Refactor suggestion
Инициализируйте Множитель по умолчанию.
Без входного источника Множитель будет Неопределено и умножение в бенчмарке упадет.
Примените:
Процедура ПриСозданииОбъекта()
+ Множитель = 1;
КонецПроцедуры📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| &МониторингПамяти | |
| Процедура ПриСозданииОбъекта() | |
| КонецПроцедуры | |
| &МониторингПамяти | |
| Процедура ПриСозданииОбъекта() | |
| Множитель = 1; | |
| КонецПроцедуры |
🤖 Prompt for AI Agents
In samples/benchmarks/Классы/БенчмаркИсточникПараметров.os around lines 4 to 6,
the field Множитель is left undefined in ПриСозданииОбъекта(), causing
multiplications to fail when no input source is provided; initialize Множитель
to a safe default (e.g., 1) inside ПриСозданииОбъекта(), ensuring the property
exists and has a numeric value before any benchmark multiplication occurs.

0 New Issues
2 Fixed Issues
0 Accepted Issues
Summary by CodeRabbit
New Features
Refactor
Documentation
Tests